public class Practice {

    public static void main3(String[] args) {
        Person person1 = new Person("张三",10);
        System.out.println(person1.name);

    }


    public static void main1(String[] args) {

        //1.当一个引用赋值为null时，代表这个引用不指向任何对象
        //2.引用一定指向对象（引用可以指向引用吗？不可以）
        //3.一个引用不能同时指向多个对象按，一个引用只能指向一个对象

        Person person1 = new Person();

        //this引用的学习-》代表当前对象的引用（就看谁调用了这个方法，谁就是this）
        //类的所有方法的参数都是否有隐式参数this？？？
        //每个成员方法的第一个参数默认是this


        //1.形参名不小心和成员名相同时
        //要习惯使用this，当方法的形参名和成员变量名一样时，编译器分辨不出来这两个变量
        //局部变量优先（方法的参数变量--》形参，局部变量）
        //给形参赋值，但是没有给对象的成员变量赋值
        //加上this来表示给当前的对象的属性赋值。

        //2.this引用指向当前对象

        //3.this引用的特性
        //


        //this的用法--》访问成员变量
        //this访问构造方法
        //this访问构造方法


        //如何初始化对象
        //每次创建对象后必须调用setdata方法后才可以设置日期，比较麻烦，那对象应该如何初始化
        //局部变量必须初始化后才能使用，为什么字段声明之后没有给值依然可以使用？（什么是字段）
        //构造方法:构造方法非常特殊，这个方法没有返回值，方法名和类名一致
        //在实例化对象时，此时同时会调用对象的构造方法

        Person person2 = new Person();

    }
    //因为他们属于成员变量，所以编译器在这里会给他们默认值，如果是引用类型，则是null，int默认为0，
    //boolean是false

    }

class Person{
    public String name;
    public int age;
    public void eat() {
        System.out.println("吃");
    }

    public void play() {
        System.out.println("玩");
    }
    public void setName(Person this,String name) {
        this.name = name;
    }

    public Person() {
        System.out.println("不带参数的构造方法");
    }
    //不带参数的构造方法，这个方法如果没有写，则Java会自动提供。
    //如果你没有写任何的构造方法，此时Java
    //会帮我们提供一个默认的，不带参数的构造方法

    //如果自己写了构造方法，此时java都不会再提供不带参数的构造方法了


    //如果自己写了，则会调用你自己写的构造方法

    public Person(String name,int age) {
        this.name = name;
        this.age = age;
        System.out.println("两个参数");
    }

    public Person(String name) {
        this.name = name;
        System.out.println("一个参数");
    }



    //构造方法是一个特殊的成员方法，名字必须和类名相同，在创建对象
    //的同时自动调用。在整个对象的生命周期内只调用一次

    //构造方法默认没有返回值，不加void，加void后会出错

    //在实例化对象的时候调用，只会被调用一次

    
}



//1.为对象分配好内存
//2.调用合适的构造方法
//

//构造方法的特性
//名字必须和类名相同
//


//构造方法可以通过this调用其他构造方法，是否可以通过this调用其他普通方法
//this调用构造1方法时，1.必须放到第一行 2.只能在构造方法内部才能用this调用构造方法（其他方法不能调用构造方法）
//构造方法可以调用其他构造方法吗？？？  可以，在构造方法内部可以使用this调用其他成员方法

//在构造方法互相调用过程中，不能形成环
//在方法里面使用this访问其他方法


//
//this.name    访问当前对象的成员变量
//this.func(); 访问当前对象的成员方法
//this(); 调用当前对象的其他构造方法

//this不能调用静态的成员方法和变量

//面向对象的三大特性：封装，继承，多态


//封装：把类的实现细节进行隐藏。对外只提供一些交互的接口。
// 套壳屏蔽细节，将数据和操作数据的方法进行有机结合。隐藏对象的属性和实现细节，进对外提供接口和对象进行交互
// 将内部实现细节进行隐藏
//封装的作用：

//访问修饰限定符
//private 默认权限 protected public
//默认权限就是当什么修饰限定符号都不加，默认权限英文翻译是de
//fault，但是 实际上并没有default这个修饰限定词语



//private



